'''

在 Python 中，`r` 和 `rb` 是两种不同的文件读取模式。

`r` 表示以文本模式（text mode）读取文件，Python 会自动将文件内容解码为 Unicode 字符串。
`rb` 表示以二进制模式（binary mode）读取文件，Python 会将文件内容读取为字节序列（bytes），不会进行任何解码。

一般来说，如果你要读取文本文件（如 `.txt`、`.py` 等），使用 `r` 模式即可。
如果你要读取二进制文件（如 `.jpg`、`.exe` 等），则应该使用 `rb` 模式。

'''

def generator_func():
    yield 1
    yield 2
    print('hello world')
    yield 3


# 生成器读取大文件
def read_large_file(file_path):
    """读取大文件"""
    with open(file_path, 'r',encoding='utf-8') as f: # 读取文本文件，使用encoding='utf-8'
        for line in f:
            yield line.strip()



def read_large_file_in_blocks(file_path, block_size=1024):
    """读取大文件（块读取）"""
    with open(file_path, 'rb') as f: # 使用二进制模式打开文件,不使用encoding='utf-8'
        while True:
            block = f.read(block_size)
            if not block:
                break
            yield block



if __name__ == '__main__':
    # for 循环自动的捕获 StopIteration 异常，并结束循环
    # for i in generator_func():
    #     print(i)

    # 使用生成器读取大文件
    # file_path = 'large_file.txt'
    # for line in read_large_file(file_path):
    #     print(line)

    # 使用生成器读取大文件（块读取）
    file_path = 'large_file.txt'
    for block in read_large_file_in_blocks(file_path):
        print(block)